In a conventional computer server system, a primary measure of performance is the number of transactions per minute (TPM) handled by the server system. One of the major impediments to a high TPM throughput is the number of interrupts handled and processed per second by the host computer or server system. On most server systems, two types of interrupts predominate: (1) disk drive I/O interrupts handled in conjunction with a disk drive controller, and (2) workstation interrupts generated by one or more workstation nodes and handled through the network controller. There may be more than one of each of these types of controllers and there may be other types of controllers appropriate to the devices attached to the host as well.
If we consider a Redundant Array of Independent Disk (RAID) drive array and the disk I/O interrupts generated by or in conjunction with that RAID array, a better understanding of the impediments imposed by conventional systems will be appreciated. By way of example, a Transaction Processing Counsel-Type C (TPC-C) system running a 10,000 TPM load in a conventional system may typically generate about 6,000 input/output (I/O) operations per second. Handling each interrupt may typically involve executing between about 500 and about 4000 instructions. For example, the DAC960 requires about 564 instructions for each interrupt, and the Flashpoint requires about 3657 instructions. Therefore, the total I/O interrupt processing overhead for 6,000 I/O operations per second system may typically run into millions of instructions per second. For example, for a 6000 interrupts/sec system needing 500 instructions/interrupt, three million instructions/sec are executed.
The impact of interrupts can be particularly significant when the computer system is a network server configured and operable to serve input/output (I/O) requests for data or program information from a large number of workstation users. These conventional systems handle interrupts as they occur with only minor variations that may occur when the system is heavily loaded, and even under such heavily loaded condition, the delay in handling interrupts is not a controlled delay, rather it is the result of system capacity limitations. It will therefore be appreciated that in conventional systems, neither the number of I/O operations nor the number of interrupts generated by those I/O operations are constrained, controlled, or optimized to reduce the interrupt related overhead and improve system performance.
In similar manner, the total overhead to process one Input/Output (I/O) completion runs into thousands of processor instructions, and I/O completion processing overhead runs into millions of instructions per second.
Locking overhead, added by the multiprocessor system, is an additional burden. The locking cycle is particularly problematic and a burden on the system because for at least most microprocessors, locking stops all activity on the system bus during the lock cycle.
For every completed I/O, device drivers typically do number of calls before posting the completion to the file system or original request. In most of the operating systems, device drivers are layered, therefore the same functions are called for every I/O. For example, a low level controller driver typically makes calls to an upper level disk driver for every I/O. These call operations are summarized as follows:
(a) Controller driver calls disk driver.
(b) Controller driver frees up the associated I/O request buffer/resource.
(c) Controller driver does at least one set of lock/unlock per I/O request to free the buffer/resource.
(d) Disk driver calls upper level driver.
(e) Disk driver frees up the associated I/O request buffer/resource.
(f) Disk driver does at least one set of lock/unlock per I/O request to free the buffer/resource.